home *** CD-ROM | disk | FTP | other *** search
- title '128-character table for CGA'
- name csls2
- page 55,132
-
- ;
- ; RAM-Loadable Character Sets for the IBM PC
- ; Listing 2
- ;
- ; Richard Wilton
- ; July 1986
- ;
-
- ; Notes:
- ; This program loads a 128-character definition table for use in APA
- ; graphics modes. The program first selects an APA graphics mode.
- ; Then the BIOS pointers to the character set table are updated.
- ;
- ; Use on IBM Color Graphics Adapter ONLY.
-
-
- cseg segment para public 'CODE'
-
- assume cs:cseg,ds:cseg
-
- org 100h ; initial program counter for .COM file
-
- label0:
- jmp label1 ; jump around character set table
- even
-
- ; definitions for 8 by 8 characters 80h through FFh
- csdefs db 087h,033h,03Fh,033h,087h,0E7h,0F3h,087h ; 080h
- db 0FFh,099h,0FFh,099h,099h,099h,0C0h,0FFh ; 081h
- db 0F1h,0FFh,0C3h,099h,081h,09Fh,0C3h,0FFh ; 082h
- db 081h,03Ch,0C3h,0F9h,0C1h,099h,0C0h,0FFh ; 083h
- db 099h,0FFh,0C3h,0F9h,0C1h,099h,0C0h,0FFh ; 084h
- db 08Fh,0FFh,0C3h,0F9h,0C1h,099h,0C0h,0FFh ; 085h
- db 0E7h,0E7h,0C3h,0F9h,0C1h,099h,0C0h,0FFh ; 086h
- db 0FFh,0FFh,0C3h,09Fh,09Fh,0C3h,0F9h,0E3h ; 087h
- db 081h,03Ch,0C3h,099h,081h,09Fh,0C3h,0FFh ; 088h
- db 099h,0FFh,0C3h,099h,081h,09Fh,0C3h,0FFh ; 089h
- db 08Fh,0FFh,0C3h,099h,081h,09Fh,0C3h,0FFh ; 08Ah
- db 099h,0FFh,0C7h,0E7h,0E7h,0E7h,0C3h,0FFh ; 08Bh
- db 083h,039h,0C7h,0E7h,0E7h,0E7h,0C3h,0FFh ; 08Ch
- db 08Fh,0FFh,0C7h,0E7h,0E7h,0E7h,0C3h,0FFh ; 08Dh
- db 09Ch,0E3h,0C9h,09Ch,080h,09Ch,09Ch,0FFh ; 08Eh
- db 0E7h,0E7h,0FFh,0C3h,099h,081h,099h,0FFh ; 08Fh
- db 0F1h,0FFh,081h,0CFh,0C3h,0CFh,081h,0FFh ; 090h
- db 0FFh,0FFh,080h,0F3h,080h,033h,080h,0FFh ; 091h
- db 0E0h,0C9h,099h,080h,099h,099h,098h,0FFh ; 092h
- db 0C3h,099h,0FFh,0C3h,099h,099h,0C3h,0FFh ; 093h
- db 0FFh,099h,0FFh,0C3h,099h,099h,0C3h,0FFh ; 094h
- db 0FFh,08Fh,0FFh,0C3h,099h,099h,0C3h,0FFh ; 095h
- db 0C3h,099h,0FFh,099h,099h,099h,0C0h,0FFh ; 096h
- db 0FFh,08Fh,0FFh,099h,099h,099h,0C0h,0FFh ; 097h
- db 0FFh,099h,0FFh,099h,099h,0C1h,0F9h,083h ; 098h
- db 03Ch,0E7h,0C3h,099h,099h,0C3h,0E7h,0FFh ; 099h
- db 099h,0FFh,099h,099h,099h,099h,0C3h,0FFh ; 09Ah
- db 0E7h,0E7h,081h,03Fh,03Fh,081h,0E7h,0E7h ; 09Bh
- db 0E3h,0C9h,0CDh,087h,0CFh,08Ch,081h,0FFh ; 09Ch
- db 099h,099h,0C3h,081h,0E7h,081h,0E7h,0E7h ; 09Dh
- db 007h,033h,033h,005h,039h,030h,039h,038h ; 09Eh
- db 0F1h,0E4h,0E7h,0C3h,0E7h,0E7h,027h,08Fh ; 09Fh
- db 0F1h,0FFh,0C3h,0F9h,0C1h,099h,0C0h,0FFh ; 0A0h
- db 0E3h,0FFh,0C7h,0E7h,0E7h,0E7h,0C3h,0FFh ; 0A1h
- db 0FFh,0F1h,0FFh,0C3h,099h,099h,0C3h,0FFh ; 0A2h
- db 0FFh,0F1h,0FFh,099h,099h,099h,0C0h,0FFh ; 0A3h
- db 0FFh,083h,0FFh,083h,099h,099h,099h,0FFh ; 0A4h
- db 081h,0FFh,099h,089h,081h,091h,099h,0FFh ; 0A5h
- db 0C3h,093h,093h,0C1h,0FFh,081h,0FFh,0FFh ; 0A6h
- db 0C7h,093h,093h,0C7h,0FFh,083h,0FFh,0FFh ; 0A7h
- db 0E7h,0FFh,0E7h,0CFh,09Fh,099h,0C3h,0FFh ; 0A8h
- db 0FFh,0FFh,0FFh,081h,09Fh,09Fh,0FFh,0FFh ; 0A9h
- db 0FFh,0FFh,0FFh,081h,0F9h,0F9h,0FFh,0FFh ; 0AAh
- db 03Ch,039h,033h,021h,0CCh,099h,033h,0F0h ; 0ABh
- db 03Ch,039h,033h,024h,0C8h,090h,030h,0FCh ; 0ACh
- db 0E7h,0E7h,0FFh,0E7h,0E7h,0E7h,0E7h,0FFh ; 0ADh
- db 0FFh,0CCh,099h,033h,099h,0CCh,0FFh,0FFh ; 0AEh
- db 0FFh,033h,099h,0CCh,099h,033h,0FFh,0FFh ; 0AFh
- db 0DDh,077h,0DDh,077h,0DDh,077h,0DDh,077h ; 0B0h
- db 0AAh,055h,0AAh,055h,0AAh,055h,0AAh,055h ; 0B1h
- db 024h,088h,024h,011h,024h,088h,024h,011h ; 0B2h
- db 0E7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h,0E7h ; 0B3h
- db 0E7h,0E7h,0E7h,0E7h,007h,0E7h,0E7h,0E7h ; 0B4h
- db 0E7h,0E7h,007h,0E7h,007h,0E7h,0E7h,0E7h ; 0B5h
- db 0C9h,0C9h,0C9h,0C9h,009h,0C9h,0C9h,0C9h ; 0B6h
- db 0FFh,0FFh,0FFh,0FFh,001h,0C9h,0C9h,0C9h ; 0B7h
- db 0FFh,0FFh,007h,0E7h,007h,0E7h,0E7h,0E7h ; 0B8h
- db 0C9h,0C9h,009h,0F9h,009h,0C9h,0C9h,0C9h ; 0B9h
- db 0C9h,0C9h,0C9h,0C9h,0C9h,0C9h,0C9h,0C9h ; 0BAh
- db 0FFh,0FFh,001h,0F9h,009h,0C9h,0C9h,0C9h ; 0BBh
- db 0C9h,0C9h,009h,0F9h,001h,0FFh,0FFh,0FFh ; 0BCh
- db 0C9h,0C9h,0C9h,0C9h,001h,0FFh,0FFh,0FFh ; 0BDh
- db 0E7h,0E7h,007h,0E7h,007h,0FFh,0FFh,0FFh ; 0BEh
- db 0FFh,0FFh,0FFh,0FFh,007h,0E7h,0E7h,0E7h ; 0BFh
- db 0E7h,0E7h,0E7h,0E7h,0E0h,0FFh,0FFh,0FFh ; 0C0h
- db 0E7h,0E7h,0E7h,0E7h,000h,0FFh,0FFh,0FFh ; 0C1h
- db 0FFh,0FFh,0FFh,0FFh,000h,0E7h,0E7h,0E7h ; 0C2h
- db 0E7h,0E7h,0E7h,0E7h,0E0h,0E7h,0E7h,0E7h ; 0C3h
- db 0FFh,0FFh,0FFh,0FFh,000h,0FFh,0FFh,0FFh ; 0C4h
- db 0E7h,0E7h,0E7h,0E7h,000h,0E7h,0E7h,0E7h ; 0C5h
- db 0E7h,0E7h,0E0h,0E7h,0E0h,0E7h,0E7h,0E7h ; 0C6h
- db 0C9h,0C9h,0C9h,0C9h,0C8h,0C9h,0C9h,0C9h ; 0C7h
- db 0C9h,0C9h,0C8h,0CFh,0C0h,0FFh,0FFh,0FFh ; 0C8h
- db 0FFh,0FFh,0C0h,0CFh,0C8h,0C9h,0C9h,0C9h ; 0C9h
- db 0C9h,0C9h,008h,0FFh,000h,0FFh,0FFh,0FFh ; 0CAh
- db 0FFh,0FFh,000h,0FFh,008h,0C9h,0C9h,0C9h ; 0CBh
- db 0C9h,0C9h,0C8h,0CFh,0C8h,0C9h,0C9h,0C9h ; 0CCh
- db 0FFh,0FFh,000h,0FFh,000h,0FFh,0FFh,0FFh ; 0CDh
- db 0C9h,0C9h,008h,0FFh,008h,0C9h,0C9h,0C9h ; 0CEh
- db 0E7h,0E7h,000h,0FFh,000h,0FFh,0FFh,0FFh ; 0CFh
- db 0C9h,0C9h,0C9h,0C9h,000h,0FFh,0FFh,0FFh ; 0D0h
- db 0FFh,0FFh,000h,0FFh,000h,0E7h,0E7h,0E7h ; 0D1h
- db 0FFh,0FFh,0FFh,0FFh,000h,0C9h,0C9h,0C9h ; 0D2h
- db 0C9h,0C9h,0C9h,0C9h,0C0h,0FFh,0FFh,0FFh ; 0D3h
- db 0E7h,0E7h,0E0h,0E7h,0E0h,0FFh,0FFh,0FFh ; 0D4h
- db 0FFh,0FFh,0E0h,0E7h,0E0h,0E7h,0E7h,0E7h ; 0D5h
- db 0FFh,0FFh,0FFh,0FFh,0C0h,0C9h,0C9h,0C9h ; 0D6h
- db 0C9h,0C9h,0C9h,0C9h,000h,0C9h,0C9h,0C9h ; 0D7h
- db 0E7h,0E7h,000h,0E7h,000h,0E7h,0E7h,0E7h ; 0D8h
- db 0E7h,0E7h,0E7h,0E7h,007h,0FFh,0FFh,0FFh ; 0D9h
- db 0FFh,0FFh,0FFh,0FFh,0E0h,0E7h,0E7h,0E7h ; 0DAh
- db 000h,000h,000h,000h,000h,000h,000h,000h ; 0DBh
- db 0FFh,0FFh,0FFh,0FFh,000h,000h,000h,000h ; 0DCh
- db 00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh,00Fh ; 0DDh
- db 0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h,0F0h ; 0DEh
- db 000h,000h,000h,000h,0FFh,0FFh,0FFh,0FFh ; 0DFh
- db 0FFh,0FFh,0C4h,091h,09Bh,091h,0C4h,0FFh ; 0E0h
- db 0FFh,0C3h,099h,083h,099h,083h,09Fh,09Fh ; 0E1h
- db 0FFh,081h,099h,09Fh,09Fh,09Fh,09Fh,0FFh ; 0E2h
- db 0FFh,080h,0C9h,0C9h,0C9h,0C9h,0C9h,0FFh ; 0E3h
- db 081h,099h,0CFh,0E7h,0CFh,099h,081h,0FFh ; 0E4h
- db 0FFh,0FFh,0C0h,093h,093h,093h,0C7h,0FFh ; 0E5h
- db 0FFh,0CCh,0CCh,0CCh,0CCh,0C1h,0CFh,09Fh ; 0E6h
- db 0FFh,0C4h,091h,0F3h,0F3h,0F3h,0F3h,0FFh ; 0E7h
- db 081h,0E7h,0C3h,099h,099h,0C3h,0E7h,081h ; 0E8h
- db 0E3h,0C9h,09Ch,080h,09Ch,0C9h,0E3h,0FFh ; 0E9h
- db 0E3h,0C9h,09Ch,09Ch,0C9h,0C9h,088h,0FFh ; 0EAh
- db 0F1h,0E7h,0F3h,0C1h,099h,099h,0C3h,0FFh ; 0EBh
- db 0FFh,0FFh,081h,024h,024h,081h,0FFh,0FFh ; 0ECh
- db 0F9h,0F3h,081h,024h,024h,081h,09Fh,03Fh ; 0EDh
- db 0E3h,09Fh,03Fh,003h,03Fh,09Fh,0E3h,0FFh ; 0EEh
- db 0C3h,099h,099h,099h,099h,099h,099h,0FFh ; 0EFh
- db 0FFh,081h,0FFh,081h,0FFh,081h,0FFh,0FFh ; 0F0h
- db 0E7h,0E7h,081h,0E7h,0E7h,0FFh,081h,0FFh ; 0F1h
- db 0CFh,0E7h,0F3h,0E7h,0CFh,0FFh,081h,0FFh ; 0F2h
- db 0F3h,0E7h,0CFh,0E7h,0F3h,0FFh,081h,0FFh ; 0F3h
- db 0F1h,0E4h,0E4h,0E7h,0E7h,0E7h,0E7h,0E7h ; 0F4h
- db 0E7h,0E7h,0E7h,0E7h,0E7h,027h,027h,08Fh ; 0F5h
- db 0E7h,0E7h,0FFh,081h,0FFh,0E7h,0E7h,0FFh ; 0F6h
- db 0FFh,089h,023h,0FFh,089h,023h,0FFh,0FFh ; 0F7h
- db 0C7h,093h,093h,0C7h,0FFh,0FFh,0FFh,0FFh ; 0F8h
- db 0FFh,0FFh,0FFh,0E7h,0E7h,0FFh,0FFh,0FFh ; 0F9h
- db 0FFh,0FFh,0FFh,0FFh,0E7h,0FFh,0FFh,0FFh ; 0FAh
- db 0F0h,0F3h,0F3h,0F3h,013h,093h,0C3h,0E3h ; 0FBh
- db 087h,093h,093h,093h,093h,0FFh,0FFh,0FFh ; 0FCh
- db 08Fh,0E7h,0CFh,09Fh,087h,0FFh,0FFh,0FFh ; 0FDh
- db 0FFh,0FFh,0C3h,0C3h,0C3h,0C3h,0FFh,0FFh ; 0FEh
- db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ; 0FFh
-
- label1:
-
- ; exit if new table same as current table
- mov al,1Fh
- mov ah,35h ; get interrupt 1Fh vector from DOS
- int 21h
- mov di,bx ; ES:DI -> current table
-
- mov si,offset csdefs
- push cs
- pop ds ; DS:SI -> our table
-
- mov cx,label1-csdefs ; size of table in bytes
- repe cmpsb
- jne label2 ; jump if our table contains new data
-
- mov ax,4C00h
- int 21h ; exit to DOS
-
- ; put CGA into All Points Addressible graphics mode so that DOS will use
- ; our character table
- label2: mov al,6 ; 640x200 2color APA graphics
- mov ah,0
- int 10h
-
- ; point CGA graphics character generator to our character definitions
- mov dx,offset csdefs
- push cs
- pop ds ; DS:DX points to our table
- mov al,1Fh ; interrupt number
- mov ah,25h ; DOS function number
- int 21h
-
- ; leave table resident in RAM
- mov dx,offset label1
- mov cl,4
- shr dx,cl ; DX := size of resident table
- inc dx ; in paragraphs
- mov ax,3100h
- int 21h ; terminate and remain resident
-
- cseg ends
-
- end label0